package com.atguigu.springbootdemo.controller;

import com.atguigu.springbootdemo.bean.Employee;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Spring容器默认扫描  SpringBootDemoApplication(主启动类)所在的包及其子包
 * ---------
 * Controller:控制器。
 *             能够处理url请求的Java类
 *
 * @Controller的作用:
 *          1、告诉你的同事和Spring容器，这个类是一个控制器
 *          2、Spring容器扫描到这个类时，会自动在容器为当前类创建一个单例的对象
 *
 *  -------------------------
 *  写（数据）接口：
 *          接收指定的url，处理url,回复指定格式的数据
 */
@Controller
@RestController   //@Controller + 为这个类的所有方法都自动添加 @ResponseBody
public class HelloController {
    /*
    @RequestMapping:把某个url请求的处理绑定到当前方法
        url:在Java代码中只写端口号后面的部分
     */
    @RequestMapping("/hi")
    public Object handle(){
        System.out.println("处理了hi请求");
        //处理完成后，将a.html返回给浏览器
        //int i = 1 / 0;
        return "a.html";
    }

    //直接把方法的返回值回复给浏览器
    @ResponseBody
    @RequestMapping("/hello")
    public Object handle1(){
        System.out.println("处理了hello请求");

        //直接返回一个字符串，默认在项目的根目录下找名为ok的html文件
        //ok就是给你的数据，不是一个页面！直接回复给浏览器就行了
        return "ok";
    }
    /*
       根据回复的数据的类型分为两类：
            第一类：字面量
                    基本数据类型和包装类，String都是字面量
                    字面上就可以看出变量值的变量
                            int i = 10;
                            String s = "haha";
                    直接把字面量不做任何处理，回复给请求方。
            第二类：非字面量
                    字面上看不出变量值的变量
                            Employee e
                            SpringBoot调用Jackson(处理json)把变量转换为json字符串，再回复给浏览器！
     */
    @RequestMapping("/nihao")
    public Object handle3(){
        Employee employee = new Employee(1, "tom", "male", "tom@qq.com");
        return employee;
    }

}


/**
 * Spring容器默认扫描SpringBootDemoApplication(主启动类)所在的包及其子包
 * ----------------
 *
 * controller:控制器
 *              能够处理url请求的Java类
 *
 * @Controller的作用：
 *      1、告诉你的同事和Spring容器，这个类是一个控制器
 *      2、Spring容器扫描到这个类时，会自动在容器中为当前类创建一个单例的对象
 *
 * -----------------------------
 *      写（数据）接口：
 *              接收指定的url，处理url,回复指定格式的数据
  */
//@Controller
//@RestController  //@Controller + 为这个类的所有方法都自动添加 @ResponseBody
//public class HelloController {
//    /*@RequestMapping:把某个url请求的处理绑定到当前方法
//        url:在Java代码中只写端口号后面的部分
//    */
//    @RequestMapping("/hi")
//    public Object handle(){
//        System.out.println("处理了hi请求");
//        //处理完成后，将a.html返回给浏览器
//        return "a.html";
//    }
//
//    //直接把方法的返回值回复给浏览器
//    @ResponseBody
//    @RequestMapping("/hello")
//    public Object handle1(){
//        System.out.println("处理了hello请求");
//
//        //直接返回一个字符串，默认在项目的根目录下找 名为ok的html文件
//        //ok就是给你的数据，不是一个页面！直接回复给浏览器就行
//        return "ok";
//    }
//
//    /*
//    根据回复的数据的类型分为两类：
//           第一类:字面量
//                    基本数据类型和包装类，String都是字面量
//                    字面上就可以看出变量值的变量
//                        int i = 10;
//                        String s = "haha";
//
//                     直接把字面量不做任何处理，回复给请求方
//
//           第二类：非字面量
//                    字面上看不出变量值的变量
//                        Employee e
//                        SpringBoot调用Jackson（处理json）把变量转换为json字符串，再回复给浏览器！
//     */
//    @RequestMapping("/nihao")
//    public Object handle3(){
//        Employee employee = new Employee(2, "tony", "female", "tony@163.com");
//
//        return employee;
//    }
//
//
//    //不能有能处理同一个url的多个方法存在！否则会产生歧义，无法启动webapp
//    @RequestMapping("/a/{hahaha}/c")
//    public Object handle4(@PathVariable("hahaha") String path){
//        System.out.println("path:" + path);
//        return "ok";
//    }
//}
/**
 * Spring容器默认扫描SpringBootDemoApplication(主启动类)所在的包及其子包
 * ----------------
 *
 * controller:控制器
 *              能够处理url请求的Java类
 *
 * @Controller的作用：
 *      1、告诉你的同事和Spring容器，这个类是一个控制器
 *      2、Spring容器扫描到这个类时，会自动在容器中为当前类创建一个单例的对象
 *
 * -----------------------------
 *      写（数据）接口：
 *              接收指定的url，处理url,回复指定格式的数据
 */

//@Controller
//@RestController
//public class HelloController {
//    /*
//    @RequestMapping:把某个url请求的处理，绑定到当前方法
//        url:在Java代码中只写端口号后面的部分
//     */
//    @RequestMapping("/hi")
//    public Object handle(){
//        System.out.println("处理了hi请求");
//        //处理完成后，将a.html返回给浏览器
//        return "a.html";
//    }
//
//    //直接把方法的返回值回复给浏览器
//    @ResponseBody
//    @RequestMapping("/hello")
//    public Object handle1(){
//        System.out.println("处理了hello请求");
//
//        //直接返回一个字符串，默认在项目的根目录下找 名为 ok.xml的文件
//        //ok就是给你的数据，不是一个页面！直接回复给浏览器就行了
//        return "ok";
//    }
//
//    /*
//    根据回复的数据的类型分为两类：
//            第一类：字面量
//                基本数据类型和包装类，String都是字面量
//                字面上就可以看出变量值的变量
//                int i = 10;
//                String s = "hahaha";
//              直接把字面量不做任何处理，回复给请求方
//
//           第二类：非字面量
//                    字面上看不出变量值的变量
//                        Employee e
//                        SpringBoot调用Jackson(处理json)把变量转为json数据，再回复给浏览器
//     */
//    @RequestMapping("/nihao")
//    public Object handle3(){
//        Employee employee = new Employee(1, "lisi", "male", "lisi@qq.com");
//
//        return employee;
//    }
//
//    //不能有能处理同一个url的多个方法存在，否则会产生歧义，无法启动webapp
//    @RequestMapping("/a/{hahaha}/c")
//    public Object handle4(@PathVariable("hahaha") String path){
//        System.out.println("path:" + path);
//        return "ok";
//    }
//}